﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FlexFlow.Base;
using FlexFlow.Model;

namespace FlexFlow.Base.Interface
{
    /// <summary>
    /// 工作流引擎表单数据提供器
    /// </summary>
    public interface IWorkFlowFormProvider : IPhysicalEntityProvider<WorkFlowForm>
    {
        /// <summary>
        /// 重命名表单
        /// </summary>
        /// <param name="id">
        /// 表单ID
        /// </param>
        /// <param name="newName">
        /// 新名称
        /// </param>
        /// <returns>
        /// 一个表示操作是否成功的值
        /// </returns>
        bool Rename(Guid id, string newName);
        /// <summary>
        /// 取得指定用户创建的具有指定名称的指定类型的工作流表单
        /// </summary>
        /// <param name="creator">
        /// 创建者ID
        /// </param>
        /// <param name="name">
        /// 名称
        /// </param>
        /// <param name="temp">
        /// 表单模板ID
        /// </param>
        /// <returns>
        /// 取得的功能工作流表单实例
        /// </returns>
        WorkFlowForm Get(string name, Guid temp, Guid creator);
        /// <summary>
        /// 创建指定用户创建的并且名称包含指定字符的表单列表
        /// </summary>
        /// <param name="creator">
        /// 表单的创建者
        /// </param>
        /// <param name="nameLike">
        /// 要取得的表单名称中应包含的字符列表
        /// </param>
        /// <param name="limit">
        /// 返回的数据数量限制
        /// </param>
        /// <param name="formTemp">
        /// 表单模板ID
        /// </param>
        /// <param name="skip">
        /// 返回的数据的起始位置
        /// </param>
        /// <returns>
        /// 表单列表
        /// </returns>
        List<WorkFlowForm> GetUserForms(Guid creator, string nameLike = "",Guid? formTemp = null, int skip = 0, int limit = 10);
        /// <summary>
        /// 更新指定ID对应的表单模板的内容
        /// </summary>
        /// <param name="frmId">
        /// 表单模板ID
        /// </param>
        /// <param name="content">
        /// 表单内容
        /// </param>
        /// <returns>
        /// 一个值，表示更新是否成功
        /// </returns>
        bool UpdateContent(Guid frmId, Dictionary<string, Object> content);
    }
}
